package vistaDibujable;

import java.io.*;
import java.util.StringTokenizer;



public class Mapa implements Dibujable, Serializable {
    // #creamos un mapa bidimensional que contiene objetos tipo "celda"
    private celda[][] tabla;
//    private String nombre;

    // #constructor del mapa, recibe el tamanio X e Y del mapa
    public Mapa(int a, int b,String Arch) throws IOException{
        this.tabla = new celda[a+1][b+1];
    //    this.initab(a,b);
        this.cargarMapaTxt(Arch);
    }

    // #crea e inicializa cada una de las celdas del mapa, recibe como parametros el tamanio del mapa
    public void initab(int a, int b)
    {
        //Llena el mapa con valores de agua, arena
        for (int i=0;i<a;i++)
             for (int j=0;j<b;j++)
                 this.tabla[i][j] = new celda(i,j,tipoTerreno.agua,' ');                
        for (int i=3;i<a-3;i++)
             for (int j=3;j<b-3;j++)
                 this.tabla[i][j] = new celda(i,j,tipoTerreno.arena,' ');
    }

    // # devuelve 1 si la celda definida por las coord X e Y estÃ¡ ocupada por un objeto Ã³ una construcciÃ³n
    public int ver_celda_ocupada(int x, int y)
    {
        if (this.tabla[x][y].ocupado()== 1) return 1;
        else return 0;
    }

    // # recibe como parametros una coordenada X e Y verifica si es compatible la construcciÃ³n en ese lugar de un edificio u objeto segÃºn su tipo de terreno
    public int buen_terreno(int x, int y, tipoTerreno tipo){
        if (tipo==this.tabla[x][y].tipo()) return 1;
        else return 0;
    }
    // # devuelve la celda referenciada por las coordenadas X e Y del mapa pasadas como parÃ¡metros
    public celda getCelda(int x, int y){
         return tabla[x][y];
     }



    // #imprime el mapa en pantalla
    @Override
    public void dibujar(int x, int y){
        int i, j;
        
        // # imprime los bordes del mapa
        System.out.printf("%3c", ' ');
        for (i=1;i<=x;i++) System.out.printf("%3d",i);
        System.out.print("\n");

        // # imprime el terreno
        for (i=1;i<=x;i++){
             for (j=1;j<=y;j++){
                  if (j==1) System.out.printf("%3d", i);
                  System.out.printf("%3c", tabla[i-1][j-1].lee_char());                
            }
            System.out.print('\n');
        }
    }
    
 // cargamos un txt mapa a un txt
    private void cargarMapaTxt(String Arch) throws IOException
    {
       BufferedReader archMap=new BufferedReader(new FileReader(Arch)); 
       int j=0;
       while(true)
       {
           String Linea = archMap.readLine();
           if (Linea == null) break;
      
           int i=0;
           StringTokenizer sT= new StringTokenizer(Linea);
           
           while(sT.hasMoreTokens())
           {
                char c= sT.nextToken().charAt(0);
                if (c=='~')
                this.tabla[j][i]=new celda(j, i, tipoTerreno.agua, c);
                if (c=='*')
                this.tabla[j][i]=new celda(j, i, tipoTerreno.arena, c);
                
                i++;
           }
           j++;
       }
       
    }
    
    //aun sin implementarse :(
    
    
}